#ifndef ETAT_EXPLORATION_H
#   define ETAT_EXPLORATION_H


#include "def_etat_exploration.h"
#include "base_donnees.h"


/**
 * \fn void init_etat_exploration(struct etat_exploration* exploration,
                                  const unsigned int id_region,
                                  const struct base_donnees* donnees)
 * \brief Initialise un etat_exploration.
 *
 * \param[out] exploration L'adresse de l'etat_exploration a initialiser
 * \param[in] id_region L'id de la region concernee par l'exploration
 * \param[in] donnees L'adresse d'une base de donnees correctement remplie
 *
 * Note : cette fonction a besoin de lire le fichier cartes.txt
 */
void init_etat_exploration(struct etat_exploration* exploration,
                           const unsigned int id_region,
                           const struct base_donnees* donnees);



/**
 * \fn void detruire_etat_exploration(struct etat_exploration* exploration)
 * \brief Libere la memoire allouee pour un etat_exploration
 *
 * \param[in] exploration L'adresse de l'etat_exploration a detruire
 */
void detruire_etat_exploration(struct etat_exploration* exploration);



/**
 * \fn void marquer_zone_exploree(struct etat_exploration* exploration,
                                  const unsigned int num_zone)
 * \brief Met a jour un etat_exploration afin de signaler
 *        qu'une zone donnee a ete exploree
 *
 * \param[in,out] exploration L'adresse de l'etat_exploration concerne
 * \param[in] num_zone Le numero de la zone qui a ete exploree
 *
 * \warning Cette fonction provoque une erreur de segmentation
 *          si on lui confie un numero de zone introuvable
 *          dans la region en cours d'exploration.
 */
void marquer_zone_exploree(struct etat_exploration* exploration,
                           const unsigned int num_zone);



/**
 * \fn struct zone* get_zone_exploration(const struct etat_exploration* exploration,
                                         const unsigned char x,
                                         const unsigned char y)
 * \brief Permet d'acceder aux informations concernant une zone
 *        dans un etat_exploration a partir de ses coordonnees
 *
 * \param[in] exploration L'adresse de l'etat de l'exploration en cours
 * \param[in] x Coordonnee horizontale (dans [0;8]) de la zone concernee
 * \param[in] y Coordonnee verticale (dans [0;8]) de la zone concernee
 * \return Un pointeur vers la structure zone de la zone concernee,
 *         NULL si l'emplacement est vide
 */
struct zone* get_zone_exploration(const struct etat_exploration* exploration,
                                  const unsigned char x,
                                  const unsigned char y);



/**
 * \fn char voir_si_zone_accessible(const struct etat_exploration* exploration,
                                    const unsigned char x,
                                    const unsigned char y)
 * \brief Permet de savoir si le joueur a actuellement la
 *        possibilite d'acceder a une zone donnee ou non
 *
 * \param[in] exploration L'adresse de l'etat de l'exploration en cours
 * \param[in] x La coordonnee horizontale de la zone concernee
 * \param[in] y La coordonnee verticale de la zone concernee
 * \return VRAI si la zone est accessible, FAUX sinon
 *
 * \warning Ne pas appeler cette fonction si l'espace en x,y est vide !
 */
char voir_si_zone_accessible(const struct etat_exploration* exploration,
                             const unsigned char x,
                             const unsigned char y);




#endif /* ETAT_EXPLORATION_H */
